package lock.redis;

import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.Transaction;
import redis.clients.jedis.params.SetParams;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 徒有琴
 */
public class JedisTest {
    public static void main(String[] args) {
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("www.hf1901.com", 7001));
        nodes.add(new HostAndPort("www.hf1901.com", 7002));
        nodes.add(new HostAndPort("www.hf1901.com", 7003));
        nodes.add(new HostAndPort("www.hf1901.com", 7004));
        nodes.add(new HostAndPort("www.hf1901.com", 7005));
        nodes.add(new HostAndPort("www.hf1901.com", 7006));
        JedisCluster jedisCluster = new JedisCluster(nodes);
        System.out.println(jedisCluster.get("hello"));
        jedisCluster.close();
        // 第二步：直接使用JedisCluster对象操作redis。在系统中单例存在。
//        Jedis jedis = new Jedis("www.hf1901.com", 6379);
//        System.out.println(jedis.get("master"));
//        jedis.close();

//        for (int i = 0; i < 20; i++) {
//            int num = i % 3 + 1;
//            new Thread(new Runnable() {
//                @Override
//                public void run() {
//                    Jedis jedis = new Jedis("www.hf1901.com", 6379);
//                    int amount = Integer.parseInt(jedis.get("amount"));
//                    //nx ex同时设置，保证原子性  过期时间是为了保证 在服务器出现故障的情况下，自动释放锁
//                    //其它线程可以继续抢锁
//                    String lock = jedis.set("lock", Thread.currentThread().getName(), SetParams.setParams().nx().ex(5));
//                    if ("OK".equals(lock)) {
//                        //jedis.expire("lock", 5);
//                        jedis.watch("lock");
//                        Transaction trans=jedis.multi();
//                        if (amount >= num) {//库存充足，可以购买
//                            trans.decrBy("amount", num);//扣除库存
//                        }
//                        trans.exec();
//                        jedis.del("lock");//释放锁
//                    }
//                }
//            }).start();
//        }
    }
}
